As software systems have become more complicated, it has become common to build such systems from more than one file. For example, a software system may include hundreds of files. Building a software system can be undertaken on one or more build machines, which may, for example, compile, assemble, link, and/or interpret files. Keeping track of such a large number of files introduces complexity into managing the build machines. Similarly, as preparing the files to be included in a software system has become more complicated, it has become more common to distribute the preparation of such files to more than one build machine and/or process (hereinafter referred to as a “build machine”). Such distribution complicates building software systems.
Many files needed in the completed software product can be built in stages, requiring many source and generated/built files. Many build machines may have complete copies of the source files. However, files generated by one part of the build process may be required as inputs to one or more other parts of the build process. For example, if a build machine A generates a file A1, and a build machine B generates a file B2, build machine A may need file B1 to produce a file A2, and build machine B may need file A1 to produce file B2. Thus a system and method is required to synchronize machines cooperating in a build process to ensure that files are processed in a proper order and that built files are copied to build machines that require the built files.
Distributing files necessary to complete the build of the software system to the build machines involved in the build is network bandwidth intensive, requiring large transfers of information, some of which may be duplicative or unnecessary. For example, one build machine may only need ten files to complete its portion of the build, while another build machine may need two hundred files to complete its portion of the build.
Distributing unnecessary files can slow the build process and introduce extra sources for system failure. Maintaining the files necessary to complete the build of the software system on one central server can cause unnecessarily repetitive downloads, and thus slow down the build machine. For example, if build machine A utilizes file A in step 1 of the build, and then also utilizes file A in step 3 of the build, then if the file A is stored only on a central server, the file A may need to be distributed to build machine A twice, introducing unnecessary complexity into the build process and slowing down the build process.
Consequently, there is a need for a system and method for managing builds of software systems that reduces bandwidth requirements, reduces duplicative copying and mitigates file sharing and locking problems.